"""
数据处理基类模块
"""
from abc import ABC, abstractmethod
from typing import Dict, List, Optional
import pandas as pd
from datetime import datetime

class DataHandler(ABC):
    """数据处理器基类"""
    
    def __init__(self):
        """初始化数据处理器"""
        self.continue_backtest = True
        self._data: Dict[str, Dict[str, pd.DataFrame]] = {}  # 交易所 -> 交易对 -> DataFrame
        self._latest_data: Dict[str, Dict[str, List[Dict]]] = {}  # 交易所 -> 交易对 -> 最新数据列表
        self._current_idx: Dict[str, Dict[str, int]] = {}  # 交易所 -> 交易对 -> 当前索引
    
    @property
    def data(self) -> Dict[str, Dict[str, pd.DataFrame]]:
        """获取所有数据"""
        return self._data
    
    @abstractmethod
    def update_bars(self):
        """更新最新的K线数据"""
        raise NotImplementedError("Should implement update_bars()")
    
    @abstractmethod
    def get_latest_bar(self, exchange: str, symbol: str) -> Optional[Dict]:
        """获取最新的一条数据"""
        raise NotImplementedError("Should implement get_latest_bar()")
    
    @abstractmethod
    def get_latest_bars(self, exchange: str, symbol: str, *, n: int = 50) -> List[Dict]:
        """获取最新的n条数据"""
        raise NotImplementedError("Should implement get_latest_bars()")
    
    def get_all_bars(self) -> Dict[str, Dict[str, pd.DataFrame]]:
        """获取所有K线数据"""
        return self._data.copy()  # 返回副本以防止外部修改
